[C] 选择排序不懂,大虾指教,谢谢.

来源:百度知道 编辑:UC知道 时间:2024/05/27 01:43:46
# define N 11
main()
{int k,j,t,a[N];
for (k=1;k<N;k++)
scanf("%d",&a[k]);
for (k=1;k<N-1;k++)
for (j=k+1;j<N;j++)/*这里不懂什么意思?*/
if (a[k]<a[j])
{t=a[k];a[k]=a[j];a[j]=t;}
for (k=1;k<N;k++)
printf("%5d",a[k]);
printf("\n");
}

for (j=k+1;j<N;j++)

这句的意思是,每次拿出一个数与他后面的数进行比较;
他前面的不用比了,因为都比他大。

你那个是冒泡排序。
这个才是选择排序,每次选择最大,或最小值进行调整。
#include <stdio.h>
# define N 11
int main()
{
int k,j,t,a[N],post;
for (k=1;k<N;k++)
scanf("%d",&a[k]);
for (k=1;k<N-1;k++)
{
post = k;
t = a[k];
for (j=k+1;j<N;j++)/*这里不懂什么意思?*/

// 选中第k个元素与[k+1,N-1]范围的元素比较,
{
if (a[j]<t) //如果[k+1,N-1]范围的元素比第K个元素大
{
t = a[j]; // 记录它的值,作为下次的比较
post = j; // 记录它的下标
}
}
if (post != k)
{
t = a[k];
a[k] = a[post];
a[post] = t;
}
}
for (k=1;k<N;k++)
printf("%5d",a[k]);
printf("\n");
return 0;
}